﻿'Nombre:                         AdministracionVentana
'Descripcion:                    Control el cual permite la administracion del catalogo de titulares
'Dependencias:                 
'Fecha de creación:              20090418
'Autor:                          VMORALES
'Fecha de modifcación:         
'Responsable:                  
'Num. de modifcación:            0

Option Explicit On
Option Strict On

#Region "Imports"

Imports Electrocucaracha.AdminPersonal.DAO
Imports System.Windows.Forms

#End Region

Namespace Titular

    ''' <summary>
    '''Control el cual permite la administracion del catalogo de titulares
    ''' </summary>
    Partial Public Class AdministracionVentana

#Region "Constantes"

#End Region

#Region "Miembros"

        Public Event TitularCambiado()
        Private _titular As DAO.Entidades.TitularDTO = Nothing
        Private Shared _instancia As AdministracionVentana

#End Region

#Region "Propiedades"

        Public Shared ReadOnly Property Instancia() As AdministracionVentana
            Get
                If _instancia Is Nothing Then
                    _instancia = New AdministracionVentana()
                End If

                Return _instancia
            End Get
        End Property

#End Region

#Region "Contructores"

        Private Sub New()

            ' This call is required by the Windows Form Designer.
            InitializeComponent()

            ' Add any initialization after the InitializeComponent() call.

        End Sub

#End Region

#Region "Funciones"

        ''' <summary>
        ''' Funcion que valida que dentro de los campos de texto se encuentren datos
        ''' </summary>
        ''' <returns>Verdadero en caso de que todos los campos sean validos, falso en caso contrario</returns>
        Private Function ValidacionCampos() As Boolean
            Dim resultado As Boolean = True

            If resultado And String.IsNullOrEmpty(Me.txtNombres.Text) Then
                MessageBox.Show("No se ha especificado un nombre en especifico", "Informacion incompleta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Me.txtNombres.Focus()
                resultado = False
            End If

            If resultado And String.IsNullOrEmpty(Me.txtApellidoPaterno.Text) Then
                MessageBox.Show("No se ha especificado un apellido paterno en especifico", "Informacion incompleta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Me.txtApellidoPaterno.Focus()
                resultado = False
            End If

            If resultado And String.IsNullOrEmpty(Me.txtApellidoMaterno.Text) Then
                MessageBox.Show("No se ha especificado un apellido materno en especifico", "Informacion incompleta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Me.txtApellidoMaterno.Focus()
                resultado = False
            End If

            ValidacionCampos = resultado
        End Function

        ''' <summary>
        ''' Funcion que crea un objeto de tipo titular a partir de los campos del formulario
        ''' </summary>
        ''' <returns>Objeto de tipo titular</returns>
        Private Function CrearObjeto() As Entidades.TitularDTO
            Dim titular As New Entidades.TitularDTO()

            With titular
                If Not _titular Is Nothing Then
                    .Id = Me._titular.Id
                End If
                .Nombres = Me.txtNombres.Text.Trim()
                .ApellidoPaterno = Me.txtApellidoPaterno.Text.Trim()
                .ApellidoMaterno = Me.txtApellidoMaterno.Text.Trim()
                .Activo = Me.chkActivo.IsChecked.Value
            End With

            CrearObjeto = titular
        End Function

        ''' <summary>
        ''' Funcion que carga el titular asignado en la creacion de la ventana
        ''' </summary>
        Private Sub CargarObjeto()
            _titular = Manejador.Seleccion

            If _titular Is Nothing Then
                LimpiarTextos()
                HabilitarBotones(False)
            Else
                With Me._titular
                    Me.txtNombres.Text = .Nombres.Trim()
                    Me.txtApellidoPaterno.Text = .ApellidoPaterno.Trim()
                    Me.txtApellidoMaterno.Text = .ApellidoMaterno.Trim()
                    Me.chkActivo.IsChecked = .Activo
                End With
                HabilitarBotones(True)
            End If
        End Sub

        ''' <summary>
        ''' Funcion que carga los titulares de registrados en la base de datos
        ''' </summary>
        Private Sub CargarTitulares()
            With Me.cmbTitulares
                .ItemsSource = Titular.Manejador.Titulares
                .SelectedValuePath = "Id"
            End With

            LimpiarTextos()
            HabilitarBotones(False)
        End Sub

        ''' <summary>
        ''' Funcion que resetea los campos de texto
        ''' </summary>
        Private Sub LimpiarTextos()
            Me.cmbTitulares.SelectedValue = Nothing
            Me.txtNombres.Text = String.Empty
            Me.txtApellidoPaterno.Text = String.Empty
            Me.txtApellidoMaterno.Text = String.Empty
            Me.chkActivo.IsChecked = False
        End Sub

        ''' <summary>
        ''' Funcion que habilita o deshabilita los controles de edicion del formulario
        ''' </summary>
        ''' <param name="_habilitar">Verdadero en caso de habilitar, falso en caso contrario</param>
        Private Sub HabilitarBotones(ByVal _habilitar As Boolean)
            Me.btnAplicar.IsEnabled = _habilitar
            Me.btnEliminar.IsEnabled = _habilitar
        End Sub

        ''' <summary>
        ''' Funcion que carga el titular seleccionado en el combo
        ''' </summary>
        ''' <remarks></remarks>
        Private Sub SeleccionarTitular()
            If Not Titular.Manejador.Seleccion Is Nothing Then
                Me.cmbTitulares.SelectedValue = Titular.Manejador.Seleccion.Id
            End If
        End Sub

#End Region

        Private Sub AdministracionVentana_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Me.Closing
            e.Cancel = True
            Me.Hide()
        End Sub

        Private Sub Administracion_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
            CargarTitulares()

            AddHandler Manejador.TitularesCambiados, AddressOf CargarTitulares
        End Sub

        Private Sub btnAplicar_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnAplicar.Click
            If ValidacionCampos() Then
                Dim titTemp As Entidades.TitularDTO = CrearObjeto()
                If Titular.Manejador.Dao.Actualizar(titTemp) Then
                    CargarTitulares()
                    RaiseEvent TitularCambiado()
                End If
            End If
        End Sub

        Private Sub cmbTitulares_SelectionChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles cmbTitulares.SelectionChanged
            If Not cmbTitulares.SelectedItem Is Nothing Then
                _titular = DirectCast(cmbTitulares.SelectedItem, Entidades.TitularDTO)
                CargarObjeto()
            End If
        End Sub

        Private Sub btnEliminar_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnEliminar.Click
            If Not _titular Is Nothing Then
                Dim respuesta As DialogResult = MessageBox.Show(String.Format("¿Desea eliminar al titular {0} {1} {2} y toda su informacion asociada?", _titular.Nombres, _titular.ApellidoPaterno, _titular.ApellidoMaterno), "Confirmacion", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1)
                If respuesta = Forms.DialogResult.Yes AndAlso Titular.Manejador.Dao.Eliminar(_titular) Then
                    Me.CargarTitulares()
                    RaiseEvent TitularCambiado()
                End If
            End If
        End Sub

        Private Sub btnAgregar_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnAgregar.Click
            If ValidacionCampos() Then
                _titular = CrearObjeto()
                If Manejador.Dao.Agregar(_titular) Then
                    Me.CargarTitulares()
                    RaiseEvent TitularCambiado()
                End If
            End If
        End Sub

        Private Sub btnCerrar_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnCerrar.Click
            Me.Close()
        End Sub
    End Class

End Namespace